本 Session 核心解決了在 Windows Terminal (Nushell) 環境下,透過金鑰憑證(Public Key Authentication)免密碼互連 Android Termux 時遭遇的跨平台連線障礙。其技術障礙與解決方案的底層邏輯如下:
| 遭遇症狀 | 根因剖析 (Root Cause) | 解決方案原理 |
|---|---|---|
| 寫入憑證後仍持續索取密碼 | Windows 管線流(如 Get-Content 或 cat)在傳輸字串時,會自動附帶隱藏的 BOM 表頭或 Windows 特有的換行符號(CRLF),導致 Termux OpenSSH 解析金鑰雜湊失敗。 |
利用 Nushell 原生 open 讀取檔案,並串接 str trim 函數,在記憶體中完全清洗並剔除背端所有換行字元,確保傳遞至手機的是絕對純淨的單行字串。 |
| 重啟服務時發生 Address already in use | 在 Android 系統權限限制下,標準 pkill sshd 有時無法完全回收通訊埠,導致舊的 sshd 守護程序(Daemon)持續鎖定 8022 埠,新設定無法套用。 |
祭出強制訊號 killall -9 sshd,從核心層級物理超渡所有殘留程序,確保通訊埠完全釋放以載入全新的配置。 |
| SSH 安全機制刁難目錄權限 | OpenSSH 擁有極其嚴苛的權限自我保護機制(Strict Modes)。Android 系統的家目錄與用戶組架構並非標準 Linux 設計,常被 sshd 誤判為不安全而拒絕採信金鑰。 |
除了標準執行 chmod 700 外,在啟動 sshd 時動態注入 -o StrictModes=no 參數,徹底放寬對 Android 特殊用戶組目錄結構的刻板安全判定。 |
若未來連線因不可抗力產生異常,直接在 Windows 本地端的 Nushell 視窗中,依序複製並執行以下兩行高度管道化的指令:
open ~/.ssh/id_ed25519.pub | str trim | ssh u0_a195@u11 -p 8022 "cat > ~/.ssh/authorized_keys"
ssh u0_a195@u11 -p 8022 "chmod 700 ~ && chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys && killall -9 sshd; sshd -o StrictModes=no"
100.120.102.74)全面升級為 Tailscale MagicDNS 別名 u11。建議在 Windows Nushell 設定檔中執行以下指令注入永久別名,往後只需在終端機輸入 phone 即可秒登:
"alias phone = ssh u0_a195@u11 -p 8022" | save --append $nu.config-path
當未來需要擴充第二台 Windows 宿主機 masonsp9 時,SSH 信任關係為一對一鏈結,請勿重新執行第一步的覆蓋指令。請在新電腦的 Nushell 中遵循以下精準步驟:
ssh-keygen -t ed25519
>> 追加管道,同時保留舊電腦與新電腦的信任通行權)
open ~/.ssh/id_ed25519.pub | str trim | ssh u0_a195@u11 -p 8022 "cat >> ~/.ssh/authorized_keys"
若將此自動化架構或相關腳本同步至 GitHub 等公開儲存庫,必須嚴格區分公開與機密邊界,防止身分憑證遭到全網爬蟲側錄:
| 🚨 絕對不可進 Git 的核心機密 (應受保密) | 🟢 允許安全進 Git 的公開資訊 (完全去識別化) |
|---|---|
|
|
A. 配置專案根目錄 .gitignore: 強制 Git 核心完全無視金鑰及本地環境變數檔案。
# 強制防禦金鑰與敏感配置流出
.ssh/
id_ed25519
*.pub
authorized_keys
config.nu
.env
B. 變數動態抽離(Environment Variables): 拒絕硬編碼,將動態資訊託管於宿主機本地環境變數,腳本內採動態讀取:
# Nushell 動態環境變數引用範例
let target_node = $env.MY_TAILSCALE_NODE # 系統動態載入 u11,代碼不留任何痕跡